package com.yan.designPatterns.builderPattern;

import java.util.ArrayList;

/**
CarModel的设计原理是这样的， setSequence方法是允许客户自己设置一个顺序， 是要先
启动响一下喇叭再跑起来， 还是要先响一下喇叭再启动。 对于一个具体的模型永远都固定
的， 但是对N多个模型就是动态的了。 在子类中实现父类的基本方法， run()方法读取
sequence， 然后遍历sequence中的字符串， 哪个字符串在先， 就先执行哪个方法
 * 
 */
public abstract class CarModel {
	private ArrayList<String> sequence = new ArrayList<String>();
	//启动模型
	protected abstract void start();
	//模型停止
	protected abstract void stop();
	//模型鸣笛
	protected abstract void alarm();
	//模型引擎发出声音
	protected abstract void engineBoom();
	
	public void run() {
		for (int i = 0; i < sequence.size(); i++) {
			String actionName = this.sequence.get(i);
			if (actionName.equalsIgnoreCase("start")) {
				this.start();//模型启动
			}else if (actionName.equalsIgnoreCase("stop")) {
				this.stop();//模型停止
			}else if (actionName.equalsIgnoreCase("alarm")) {
				this.alarm();//模型鸣笛
			}else if (actionName.equalsIgnoreCase("engineBoom")) {
				this.engineBoom();//模型引擎发出声音
			}
		}
	}
	
	public void setSequence(ArrayList sequence) {
		this.sequence = sequence;
	}
	
}
